"""
进程常见功能
    p.start(), 当前进程准备就绪，等待被CPU调度（工作单元其实是进程中的线程）
    p.joint(), 等待当前进程的任务执行完毕后再向下继续执行
    p.daemon = 布尔值，守护进程（必须放在start之前
        p.daemon = True, 设置为守护进程，主进程执行完毕后，子进程也自动关闭
        p.daemon = False, 设置为非守护进程，主进程等待子进程，子进程执行完毕后，主进程才结束
    p.name = 'tom', 设置进程的名称
    multiprocessing.current_process().name, 获取进程的名称
    threading.enumerate(), 获取线程的数量
    multiprocessing.set_start_methods('spawn'),操作进程的方法，
        fork，【“拷贝”几乎所有资源】【支持文件对象/线程锁等传参】【unix】【任意位置开始】【快
        spawn，【run参数传必备资源】【不支持文件对象/线程锁等传参】【unix、win】【main代码块开始】【慢】
        forkserver，【run参数传必备资源】【不支持文件对象/线程锁等传参】【部分unix】【main代码块开始】
    multiprocessing.cpu_count(), 获取CPU的个数
"""

"""
import multiprocessing
# 自定义进程类，直接将线程需要做的事写到 run 方法中
class MyProcess(multiprocessing.Process):
    def run(self):
        print("执行此进程: ", self._args)


if __name__ == '__main__':
    multiprocessing.set_start_method('spawn')
    p = MyProcess(args=('xxx',))
    p.start()
    print("继续执行...")
"""

# CPU个数，程序一般创建多少个进程？（利用CPU多核优势）
import multiprocessing

def task(number):
    print(number)

if __name__ == '__main__':
    count = multiprocessing.cpu_count()
    for i in range(count-1):
        p = multiprocessing.Process(target=task, args=(i,))
        p.start()